package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/capitalize-the-title/'>将标题首字母大写(Capitalize the Title)</a>
 * <p>
 * 给你一个字符串 title ，它由单个空格连接一个或多个单词组成，每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 ：
 *     <ul>
 *         <li>如果单词的长度为 1 或者 2 ，所有字母变成小写。</li>
 *         <li>否则，将单词首字母大写，剩余字母变成小写。</li>
 *     </ul>
 * </p>
 * <p>请你返回 大写后 的 title 。</p>
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：title = "capiTalIze tHe titLe"
 *      输出："Capitalize The Title"
 *      解释：
 *          由于所有单词的长度都至少为 3 ，将每个单词首字母大写，剩余字母变为小写。
 *
 * 示例 2：
 *      输入：title = "First leTTeR of EACH Word"
 *      输出："First Letter of Each Word"
 *      解释：
 *          单词 "of" 长度为 2 ，所以它保持完全小写。
 *          其他单词长度都至少为 3 ，所以其他单词首字母大写，剩余字母小写。
 *
 * 示例 3：
 *      输入：title = "i lOve leetcode"
 *      输出："i Love Leetcode"
 *      解释：
 *          单词 "i" 长度为 1 ，所以它保留小写。
 *          其他单词长度都至少为 3 ，所以其他单词首字母大写，剩余字母小写。
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= title.length <= 100</li>
 *     <li>title 由单个空格隔开的单词组成，且不含有任何前导或后缀空格。</li>
 *     <li>每个单词由大写和小写英文字母组成，且都是 非空 的。</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/3/11 9:10
 */
public class LC2129CapitalizeTheTitle_S {

    static class Solution {
        public String capitalizeTitle(String title) {
            char[] chars = title.toCharArray();
            int leftIndex = 0;
            int rightIndex = 0;
            while (rightIndex < chars.length) {
                while (rightIndex < title.length() && chars[rightIndex] != ' ') {
                    ++rightIndex;
                }
                // rightIndex为空格
                int length = rightIndex - leftIndex;
                if (length == 1 || length == 2) {
                    for (int i = leftIndex; i < rightIndex; ++i) {
                        // 字符小写
                        chars[i] = Character.toLowerCase(chars[i]);
                    }
                } else {
                    // 首字符大写，其他字符小写
                    for (int i = leftIndex; i < rightIndex; i++) {
                        if (i == leftIndex) {
                            chars[i] = Character.toUpperCase(chars[i]);
                        } else {
                            chars[i] = Character.toLowerCase(chars[i]);
                        }
                    }
                }
                leftIndex = rightIndex + 1;
                rightIndex = leftIndex;
            }
            return new String(chars);
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.capitalizeTitle("capiTalIze tHe titLe"));
        System.out.println(solution.capitalizeTitle("First leTTeR of EACH Word"));
        System.out.println(solution.capitalizeTitle("i lOve leetcode"));
    }
}
